package com.mtiiot.fstcpserver.report;

import com.aspose.words.Document;
import com.aspose.words.ReportingEngine;
import com.mtiiot.fstcpserver.utils.PrintBarcodeUtil;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 16-6-10.
 */
public class ReportDataUtil {
    public static ReportData getReportData(){
        ReportData rd=new ReportData();
        /**
         * top信息
         */
        rd.realName="xxx";
        rd.sex="男";
        rd.age="90岁";
        rd.orderNum="2016041803274";
        rd.barcode="2016041803274";
        rd.image= PrintBarcodeUtil.getPrintBarcodeUtil(rd.barcode).toByteArray();
        rd.finishDate="2016-04-18";
        rd.reportTitle="健康管理书";
        rd.customerName="太平人寿保险有限公司北京分公司";
        rd.labdescription="";
        rd.testType="检验项目";
        rd.zp="人体是由多种细胞组成的有机整体，随着生理年龄的增长，人体组织器官和系统的功能逐渐老化衰退。疾病只有早期发现，早期治疗，才能防止它的发展、恶化，从而才有可能避免产生不良的后果，一般30岁以下应该每两年体检一次，30岁以上推荐每年体检一次。";
        rd.pj="人体是由多种细胞组成的有机整体，随着生理年龄的增长，人体组织器官和系统的功能逐渐老化衰退。疾病只有早期发现，早期治疗，才能防止它的发展、恶化，从而才有可能避免产生不良的后果，一般30岁以下应该每两年体检一次，30岁以上推荐每年体检一次。";
        /**
         * 项目组信息
         */
        List<TestInfoGroup> tgs=new ArrayList<TestInfoGroup>();
        for(int i=0;i<10;i++){
            TestInfoGroup tg=new TestInfoGroup();//血常规5类
            tg.tp="项目类别"+i;
            List<TestInfo> ts=new ArrayList<TestInfo>();
            tg.ts=ts;
            TestInfo t=new TestInfo();
            t.name="红细胞计数";
            t.tm="[13C]-UBT";
            t.tip="";
            t.result="4.96";
            t.unit="%";
            t.rr="[4.00-5.00]";
            ts.add(t);
            t=new TestInfo();
            t.name="红细胞计数";
            t.tm="[13C]-UBT";
            t.tip="";
            t.result="4.97";
            t.unit="%";
            t.rr="[3.00-4.00]";
            ts.add(t);
            tgs.add(tg);
        }
        rd.tgs=tgs;

        /**
         * 项目信息
         */
        List<TestInfo> ts=new ArrayList<TestInfo>();
        for(int i=0;i<2;i++){
            TestInfo t=new TestInfo();
            t.name="幽门螺旋杆菌C13呼气";
            t.tm="[13C]-UBT";
            t.tip="";
            t.result="阴性(-)";
            t.unit="";
            t.rr="阴性";
            ts.add(t);
        }
        rd.ts=ts;

        /**
         * 历史检验比较
         */
        List<TestCompareInfoGroup> tcgs=new ArrayList<TestCompareInfoGroup>();
        for(int i=0;i<10;i++){
            TestCompareInfoGroup tcg=new TestCompareInfoGroup();//血常规5类
            tcg.tp="项目类别"+i;
            List<TestCompareInfo> tcs=new ArrayList<TestCompareInfo>();
            tcg.tcs=tcs;
            for(int j=0;j<5;j++){
                TestCompareInfo tc=new TestCompareInfo();
                tc.name="项目"+j;
                tc.fiveR="4.96";
                tc.fourR="4.98";
                tc.threeR="3.09";
                tc.twoR="2.09";
                tc.oneR="1.09";
                tcs.add(tc);
            }
            tcgs.add(tcg);
        }
        rd.tcgs=tcgs;

        /**
         * 解读与建议
         */
        List<DiagnosisGroup> dgs=new ArrayList<DiagnosisGroup>();
        for(int i=0;i<10;i++){
            DiagnosisGroup dg=new DiagnosisGroup();
            dg.name="项目类别"+i;
            dg.yj="幽门螺杆菌（Hp）可引起多种胃病，包括胃炎、胃溃疡、十二指肠溃疡、非溃疡性消化不良、胃癌等。因此，根除幽门螺杆菌已经成为现代消化道疾病治疗的重要措施。碳14呼气试验是一种敏感性高、特异性强、快速、简单、安全的Hp诊断方法。该检查以及无痛、无创、快速简便、无交叉感染的优点，在临床上被广泛推广应用。";
            dg.bt="幽门螺杆菌（Hp）可引起多种胃病，包括胃炎、胃溃疡、十二指肠溃疡、非溃疡性消化不良、胃癌等。因此，根除幽门螺杆菌已经成为现代消化道疾病治疗的重要措施。碳14呼气试验是一种敏感性高、特异性强、快速、简单、安全的Hp诊断方法。该检查以及无痛、无创、快速简便、无交叉感染的优点，在临床上被广泛推广应用。";
            dg.jj="幽门螺杆菌（Hp）可引起多种胃病，包括胃炎、胃溃疡、十二指肠溃疡、非溃疡性消化不良、胃癌等。因此，根除幽门螺杆菌已经成为现代消化道疾病治疗的重要措施。碳14呼气试验是一种敏感性高、特异性强、快速、简单、安全的Hp诊断方法。该检查以及无痛、无创、快速简便、无交叉感染的优点，在临床上被广泛推广应用。";
            dgs.add(dg);
        }
        rd.dgs=dgs;

        /**
         * 下次检验特别推荐的项目
         */
        List<NextTimeTestInfo> nts=new ArrayList<NextTimeTestInfo>();
        for(int i=0;i<5;i++){
            NextTimeTestInfo nt=new NextTimeTestInfo();
            nt.name="项目"+i;
            nt.times="2016-04-19/2016-07-19";
            nts.add(nt);
        }
        rd.nts=nts;
        return rd;
    }

    public static void main(String[] args){
        try {
            //仪器日结报告单
            InsDailyReportData rd=new InsDailyReportData();
            rd.insName="SMART3000";
            rd.date="2016-07-25";
            //==================概要数据封装================
            List<Outline> ols=new ArrayList<Outline>();
            Outline ol=new Outline();
            ol.date="2016-07-25";
            ol.testCount=150;
            ol.qcCount=12;
            ol.calibrationCount=12;
            ol.reagent="180";
            ol.workTime="3小时17分钟";
            ols.add(ol);
            ol=new Outline();
            ol.date="2016-07-25";
            ol.testCount=150;
            ol.qcCount=12;
            ol.calibrationCount=12;
            ol.reagent="180";
            ol.workTime="3小时17分钟";
            ols.add(ol);
            rd.ols=ols;

            //==================基础检验数据封装===============
            List<BaseTest> bts=new ArrayList<BaseTest>();
            BaseTest bt=new BaseTest();
            bt.count=12;
            bt.xxxxCode="CGRP1000002007";
            bt.endTime="18:06";
            bt.seq=12;
            bt.startTime="10:14";
            bt.testName="甲种胎儿球蛋白";
            bts.add(bt);
            bt=new BaseTest();
            bt.count=12;
            bt.xxxxCode="CGRP1000002007";
            bt.endTime="18:06";
            bt.seq=12;
            bt.startTime="10:14";
            bt.testName="甲种胎儿球蛋白";
            bts.add(bt);
            rd.bts=bts;

            //=================质控数据封装===================
            List<QcTest> qts=new ArrayList<QcTest>();
            QcTest qt=new QcTest();
            qt.count=12;
            qt.xxxxCode="CGRP1000002007";
            qt.endTime="18:06";
            qt.seq=12;
            qt.startTime="10:14";
            qt.testName="甲种胎儿球蛋白";
            qts.add(qt);
            qt=new QcTest();
            qt.count=12;
            qt.xxxxCode="CGRP1000002007";
            qt.endTime="18:06";
            qt.seq=12;
            qt.startTime="10:14";
            qt.testName="甲种胎儿球蛋白";
            qts.add(qt);
            rd.qts=qts;
            //=================定标数据封装===================
            List<CalibrationTest> cts=new ArrayList<CalibrationTest>();
            CalibrationTest ct=new CalibrationTest();
            ct.seq=1;
            ct.testName="甲种胎儿球蛋白";
            ct.xxxxCode="CGRP1000002007";
            ct.fittingRate="0.87";
            ct.status="通过";
            ct.time="09:15";
            cts.add(ct);
            ct=new CalibrationTest();
            ct.seq=1;
            ct.testName="甲种胎儿球蛋白";
            ct.xxxxCode="CGRP1000002007";
            ct.fittingRate="0.87";
            ct.status="不通过";
            ct.time="09:15";
            cts.add(ct);
            rd.cts=cts;
            //===============试剂数据====================
            List<Reagent> rs=new ArrayList<Reagent>();
            Reagent r=new Reagent();
            r.seq=1;//序号
            r.tn="甲种胎儿球蛋白";//项目名称
            r.rl="160703";//试剂批号
            r.ru="1000";//实际消耗
            r.tc=12;//检验个数
            r.cbCount=8;//定标个数
            r.qcCount=9;//质控个数
            r.dfCount=20;//差异个数
            rs.add(r);
            r=new Reagent();
            r.seq=1;//序号
            r.tn="甲种胎儿球蛋白";//项目名称
            r.rl="160703";//试剂批号
            r.ru="1000";//实际消耗
            r.tc=12;//检验个数
            r.cbCount=8;//定标个数
            r.qcCount=9;//质控个数
            r.dfCount=20;//差异个数
            rs.add(r);
            rd.rs=rs;
            //===================工时统计数据===================
            List<WorkStatistics> wss=new ArrayList<WorkStatistics>();
            WorkStatistics ws=new WorkStatistics();
            ws.pot=400;//开机时间
            ws.wt=200;//工作时间
            ws.pt=50;//暂停时间
            ws.it=150;//空闲时间
            ws.ur="60";//利用率
            wss.add(ws);
            ws=new WorkStatistics();
            ws.pot=400;//开机时间
            ws.wt=200;//工作时间
            ws.pt=50;//暂停时间
            ws.it=150;//空闲时间
            ws.ur="60";//利用率
            wss.add(ws);
            rd.wss=wss;
            //===================日志相关数据数据===================
            List<LogInfo> lis=new ArrayList<LogInfo>();
            LogInfo li=new LogInfo();
            li.time="09:45";//时间
            li.logLevel="错误";//类别
            li.message="AFP试剂不足";//消息
            lis.add(li);
            li=new LogInfo();
            li.time="09:45";//时间
            li.logLevel="错误";//类别
            li.message="AFP试剂不足";//消息
            lis.add(li);
            rd.lis=lis;

            Document doc = new Document(new FileInputStream(new File("D:\\devinlu\\项目_平台管理\\仪器日结报告单.docx")));
            ReportingEngine engine = new ReportingEngine();
            engine.buildReport(doc, rd, "rd");
            doc.save(new FileOutputStream(new File("D:\\devinlu\\项目_平台管理\\仪器日结报告单-out.pdf")),40);//生成报告单
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
}
